/**
 * 计算等级和经验值
 * @param exp 当前总经验值
 * @returns 等级和剩余经验值
 */
export function calculateLevel(exp: number): { level: number, exp: number } {
    // 基础阶段(Lv1-25)经验曲线: 0.5 * level^3 (3年达成Lv25)
    // 荣耀阶段经验曲线: 50 * (level - 25)^4
    
    let level = 1;
    let requiredExp = 0;
    
    // 基础阶段计算
    if (exp < 0.5 * Math.pow(25, 3)) {
        level = Math.floor(Math.pow(2 * exp, 1/3));
        requiredExp = 0.5 * Math.pow(level, 3);
    } 
    // 荣耀阶段计算
    else {
        const gloryExp = exp - 0.5 * Math.pow(25, 3);
        level = 25 + Math.floor(Math.pow(gloryExp / 50, 1/4));
        requiredExp = 0.5 * Math.pow(25, 3) + 50 * Math.pow(level - 25, 4);
    }
    
    // 确保等级最小为1
    level = Math.max(1, level);
    // 剩余经验值
    const remainingExp = exp - requiredExp;
    
    return {
        level,
        exp: remainingExp
    };
}
